

import java.util.*;
import java.io.*;

/**
 *
 * @author ricardo.ramos
 */
public class GestorDatosDiccionario
{
    private int sizeLectura;
    private BufferedReader buffer;
    FileReader fichero;

    /**
     * Constructor vacio
     */
    public GestorDatosDiccionario()
    {
        sizeLectura = 10;
    }

    /**
     * Devuelve el tamaño de lineas a leer por cada acceso a lectura
     * @return tamaño de linea
     */
    public int GetSizeLectura()
    {
        return this.sizeLectura;
    }

    /**
     * Asigna el tamaño de lineas que se quiere leer a la hora de hacer una lectura
     * @param size tamaño de linea
     */
    public void SetSizeLectura(int size)
    {
        if(size>0) this.sizeLectura = size;
    }

    /**
     * Crea un nuevo buffer para la lectura del fichero que se encuentra en el path
     * @param path path más el nombre del archivo
     */
    public void AbrirComunicacion(String path)
    {
        try
        {
            this.fichero = new FileReader(path);
            this.buffer = new BufferedReader(fichero);
        }
        catch(Exception exc){}
    }

    /**
     * Cierra el buffer y fichero creados
     */
    public void CerrarComunicacion()
    {
        try
        {
            fichero.close();
            buffer.close();
            fichero = null;
            buffer = null;
        }
        catch(Exception exc){}
    }

    /**
     * Con el path como parametro, incluido nombre archivo carga las palabras a un array para retornarlas
     * @param path path más el nombre del archivo a guardar
     * @return pal la lista de las palabras cargadas
     */
    public ArrayList<String> CargaDiccionario(String path)
    {
        ArrayList<String> pal = new ArrayList<String>();
        int cont=0;

        try
        {
            String linea = null;

            while(cont<sizeLectura && (linea=buffer.readLine())!=null)
            {
                pal.add(linea);
                cont++;
            }
        }
        catch(Exception exc)
        {
            System.out.println(exc.getMessage());
        }

        return pal;
    }

    /**
     * Dado un path con el nombre del archivo incluido guarda las palabras pasadas por parámetro en el archivo
     * @param pal lista de palabras
     * @param path path donde se encuentra el archivo
     * @param addFinal booleano para indicar si se quiere añadir al final del archivo o crear un nuevo con el mismo nombre
     */
    public void GuardaDiccionario(ArrayList<String> pal, String path, boolean addFinal)
    {
        FileWriter ficheroEscritura = null;
        PrintWriter pw = null;

        try
        {
          ficheroEscritura = new FileWriter(path, addFinal);
          pw = new PrintWriter(ficheroEscritura);

          for(int i=0; i<pal.size(); i++) pw.println(pal.get(i));
        }
        catch(Exception exc)
        {
           System.out.println(exc.getMessage());
        }
        finally
        {
           try
           {
               if(ficheroEscritura!=null) ficheroEscritura.close();
           }
           catch(Exception exc2)
           {
               System.out.println(exc2.getMessage());
           }
        }
    }

    /**
     * Comprueba la existencia del fichero, y si es un fichero
     * @param path path donde se encuentra el fichero a comprobar
     * @return booleano indicando la existencia o no del fichero
     */
    public boolean ExisteFichero(String path)
    {
        File fich = new File(path);

        return (fich.exists() && fich.isFile());
    }

    /**
     * Indica si el fichero es de escritura y lectura
     * @param path path del fichero
     * @return booleano que indica si el fichero es de lectura/escritura
     */
    public boolean PuedeRWFichero(String path)
    {
        File fich = new File(path);

        return (fich.canWrite() && fich.canRead());
    }

    /**
     * Borra el fichero que se encuentra en el path pasado por parámetro
     * @param path path donde se encuentra el fichero
     * @return booleano indica si se ha borrado satisfactoriamente o no
     */
    public boolean BorrarFichero(String path)
    {
        File fich = new File(path);

        if (fich.delete()) return true;
        else return false;
    }
}
